[niepce] workspace: implement folder creation
- From: Hubert Figuière <hub src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [niepce] workspace: implement folder creation
- Date: Fri, 17 Nov 2017 02:17:26 +0000 (UTC)
commit cfdb7908884db3cdd4863fb75dc5cc3eff64fa6c
Author: Hubert Figuière <hub figuiere net>
Date: Wed Nov 15 11:22:11 2017 -0500
workspace: implement folder creation
src/libraryclient/libraryclient.rs | 7 ++++++
src/niepce/ui/niepcewindow.cpp | 5 ++-
src/niepce/ui/workspacecontroller.cpp | 34 +++++++++++++++++++++++++++++---
src/niepce/ui/workspacecontroller.hpp | 23 +++++++++++++--------
4 files changed, 54 insertions(+), 15 deletions(-)
---
diff --git a/src/libraryclient/libraryclient.rs b/src/libraryclient/libraryclient.rs
index ad75808..abd5bfa 100644
--- a/src/libraryclient/libraryclient.rs
+++ b/src/libraryclient/libraryclient.rs
@@ -196,6 +196,13 @@ pub extern "C" fn libraryclient_query_folder_content(client: &mut LibraryClientW
}
#[no_mangle]
+pub extern "C" fn libraryclient_create_folder_sync(client: &mut LibraryClientWrapper,
+ p: *const c_char) -> LibraryId {
+ let path = unsafe { CStr::from_ptr(p) }.to_string_lossy();
+ client.unwrap_mut().create_folder_sync(String::from(path))
+}
+
+#[no_mangle]
pub extern "C" fn libraryclient_count_folder(client: &mut LibraryClientWrapper,
folder_id: LibraryId) {
client.unwrap_mut().count_folder(folder_id)
diff --git a/src/niepce/ui/niepcewindow.cpp b/src/niepce/ui/niepcewindow.cpp
index 1d5e54b..b843612 100644
--- a/src/niepce/ui/niepcewindow.cpp
+++ b/src/niepce/ui/niepcewindow.cpp
@@ -111,7 +111,9 @@ NiepceWindow::_createModuleShell()
// workspace treeview
- m_workspacectrl = WorkspaceController::Ptr( new WorkspaceController() );
+ auto workspace_actions = Gio::SimpleActionGroup::create();
+ gtkWindow().insert_action_group("workspace", workspace_actions);
+ m_workspacectrl = WorkspaceController::Ptr(new WorkspaceController(workspace_actions));
m_notifcenter->signal_lib_notification
.connect(sigc::mem_fun(*m_workspacectrl,
@@ -191,7 +193,6 @@ void NiepceWindow::init_actions()
// move to the workspace
section = Gio::Menu::create();
submenu->append_section(section);
- section->append(_("New Folder..."), "action");
section->append(_("New Project..."), "action");
fwk::add_action(m_action_group, "Import",
sigc::mem_fun(*this,
diff --git a/src/niepce/ui/workspacecontroller.cpp b/src/niepce/ui/workspacecontroller.cpp
index bc4221c..02f0bd9 100644
--- a/src/niepce/ui/workspacecontroller.cpp
+++ b/src/niepce/ui/workspacecontroller.cpp
@@ -25,10 +25,11 @@
#include <gtkmm/box.h>
#include "fwk/base/debug.hpp"
+#include "fwk/toolkit/application.hpp"
+#include "fwk/toolkit/gtkutils.hpp"
#include "niepce/notifications.hpp"
#include "engine/library/notification.hpp"
#include "libraryclient/libraryclient.hpp"
-#include "fwk/toolkit/application.hpp"
#include "niepcewindow.hpp"
#include "workspacecontroller.hpp"
@@ -38,8 +39,9 @@ using fwk::Application;
namespace ui {
-WorkspaceController::WorkspaceController()
+WorkspaceController::WorkspaceController(const Glib::RefPtr<Gio::SimpleActionGroup>& action_group)
: fwk::UiController()
+ , m_action_group(action_group)
, m_vbox(Gtk::ORIENTATION_VERTICAL)
{
static struct _Icons {
@@ -80,6 +82,13 @@ fwk::Configuration::Ptr WorkspaceController::getLibraryConfig() const
return std::dynamic_pointer_cast<NiepceWindow>(m_parent.lock())->getLibraryConfig();
}
+void WorkspaceController::action_new_folder()
+{
+ // XXX get a unique name
+ auto id = ffi::libraryclient_create_folder_sync(getLibraryClient()->client(), "foobar");
+ // select folder in tree
+}
+
void WorkspaceController::on_lib_notification(const eng::LibNotification &ln)
{
DBG_OUT("notification for workspace");
@@ -287,16 +296,33 @@ Gtk::Widget * WorkspaceController::buildWidget()
col = m_librarytree.get_column(num - 1);
col->set_alignment(1.0f);
+ Gtk::Box* header = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
+ header->set_spacing(4);
// TODO make it a mnemonic
m_label.set_text_with_mnemonic(Glib::ustring(_("_Workspace")));
m_label.set_mnemonic_widget(m_librarytree);
- m_vbox.pack_start(m_label, Gtk::PACK_SHRINK);
+ header->pack_start(m_label, Gtk::PACK_SHRINK);
+ Gtk::MenuButton* add_btn = Gtk::manage(new Gtk::MenuButton);
+ add_btn->set_direction(Gtk::ARROW_NONE);
+
+ auto menu = Gio::Menu::create();
+
+ auto section = Gio::Menu::create();
+ menu->append_section(section);
+ fwk::add_action(m_action_group, "NewFolder",
+ sigc::mem_fun(*this,
+ &WorkspaceController::action_new_folder),
+ section, _("New Folder..."), "workspace");
+ add_btn->set_menu_model(menu);
+
+ header->pack_end(*add_btn, Gtk::PACK_SHRINK);
+ m_vbox.pack_start(*header, Gtk::PACK_SHRINK);
Gtk::ScrolledWindow* scrolled = Gtk::manage(new Gtk::ScrolledWindow);
m_vbox.pack_start(*scrolled);
scrolled->add(m_librarytree);
m_librarytree.get_selection()->signal_changed().connect (
- sigc::mem_fun(this,
+ sigc::mem_fun(this,
&WorkspaceController::on_libtree_selection));
m_librarytree.signal_row_expanded().connect(
sigc::mem_fun(this,
diff --git a/src/niepce/ui/workspacecontroller.hpp b/src/niepce/ui/workspacecontroller.hpp
index 1b04094..04ee01e 100644
--- a/src/niepce/ui/workspacecontroller.hpp
+++ b/src/niepce/ui/workspacecontroller.hpp
@@ -17,8 +17,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
#ifndef __UI_WORKSPACECONTROLLER_H__
#define __UI_WORKSPACECONTROLLER_H__
@@ -45,7 +43,7 @@ class WorkspaceController
{
public:
typedef std::shared_ptr<WorkspaceController> Ptr;
-
+
enum {
FOLDERS_ITEM,
PROJECTS_ITEM,
@@ -54,18 +52,18 @@ public:
PROJECT_ITEM,
KEYWORD_ITEM
};
-
- WorkspaceController();
- class WorkspaceTreeColumns
+
+ WorkspaceController(const Glib::RefPtr<Gio::SimpleActionGroup>& action_group);
+ class WorkspaceTreeColumns
: public Gtk::TreeModelColumnRecord
{
public:
-
+
WorkspaceTreeColumns()
- {
+ {
add(m_icon);
add(m_id);
- add(m_label);
+ add(m_label);
add(m_type);
add(m_count);
add(m_count_n);
@@ -86,6 +84,10 @@ public:
virtual Gtk::Widget * buildWidget() override;
private:
+
+ /** action to create a new folder */
+ void action_new_folder();
+
void on_row_expanded_collapsed(const Gtk::TreeIter& iter,
const Gtk::TreePath& path, bool expanded);
void on_row_expanded(const Gtk::TreeIter& iter,
@@ -124,6 +126,9 @@ private:
ICON_KEYWORD,
_ICON_SIZE
};
+
+ Glib::RefPtr<Gio::SimpleActionGroup> m_action_group;
+
std::array< Glib::RefPtr<Gdk::Pixbuf>, _ICON_SIZE > m_icons;
WorkspaceTreeColumns m_librarycolumns;
Gtk::Box m_vbox;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]